package com.cn.wanxi.util;

public class ReadMe {
    /**
     * 2021-11-25
     * 数据库：
     * 1.下载安装mysql
     * 2.安装失败（start service）
     *      删除注册表
     *      删除安装文件夹（强制删除,粉碎）
     * 3.重新启动计算机 再次安装
     * --------------------------------------------------------------
     * 连接mysql
     * 创建表：
     * 和第二阶段 model的属性保持一致
     * 只不过，每个表多几个属性
     * id  主键
     * create_time 创建时间
     * update_time;修改时间
     * enable 状态
     * remark 备注
     * 再次将这几个属性 写入到model里面
     * ------------------------
     * 对于mysql的数据类型 和model相对于即可
     * String 对 varchar   char  text  查看他们之间的区别？
     * char表示只能是127个字符    长度一致的时候用char
     * varchar   255个字符     不定长的时候
     * text   6万个字符  字符太大的时候用
     * Integer  对    int   tinyint
     * BigDecimal  对 decimal
     *
     *  DECIMAL(5,2)   表示  5个有效数字，2个小数点
     * String 对 时间 datetime
     *-------------------------------------------------------------
     *-- 删除数据库
     * DROP DATABASE `canyin`;
     * -- `` 如果自己命名的可能是关键字，,把关键字当作普通字符
     * drop database canyin;
     * -- 创建数据库
     * CREATE SCHEMA `canyin` ;
     * -- 创建表
     * -- id 主键  每个表都必须要由id  把它理解成字典里面的页面  （索引） 必须是整型
     * -- pk 主键,nn 不能为空,ai 自动递增
     * use canyin;
     * CREATE TABLE `product` (
     *   `id` INT NOT NULL AUTO_INCREMENT,
     *   `name` VARCHAR(45) NULL,
     *   `marked_price` DECIMAL(5,2) NULL,
     *   `normal_price` DECIMAL(5,2) NULL,
     *   `content` TEXT NULL,
     *   `img_href` VARCHAR(100) NULL,
     *   `size` TINYINT NULL,
     *   `create_time` DATETIME NULL,
     *   `update_time` DATETIME NULL,
     *   `remark` VARCHAR(45) NULL,
     *   PRIMARY KEY (`id`));
     * -- 新增数据
     * INSERT INTO `product`
     * (`name`, `marked_price`, `normal_price`, `content`, `img_href`, `size`, `create_time`, `update_time`, `remark`)
     * VALUES ('回锅肉', '50', '20', '主料：肉，糖，味精', '/img/dongcaikourou.jpg', '20', '2021-11-11', '2021-11-11', 'a');
     * -- 修改数据
     * UPDATE `product` SET
     * `name` = '梅菜扣肉',
     *  `marked_price` = '40',
     *  `normal_price` = '30',
     *  `content` = '主料：，梅菜肉，糖，味精',
     *  `img_href` = '/img/dongcaikourou.jpg1',
     *  `size` = '10',
     *  `create_time` = '2021-11-11 10:00:00',
     *  `update_time` = now(),
     *  `remark` = '2'
     *  WHERE (`id` = '3');
     *  -- 删除数据
     *  delete from `product` where id=3;
     *  -- -----------------------------------------------------
     *  -- 查询两张表之间相互关系
     * SELECT * FROM product p,cuisine c
     * where  p.cuisine_id=c.id;
     * -- select -->from-->where -->group by-->having-->order by -->limit
     *
     */
    /**
     * 2021-11-26
     * 1.数据库
     * 2.能够读懂别人的代码 并根据它的代码进行修改
     * --------------------------------------------------
     * 熟悉别人的代码（项目）
     * 1.项目的目的？背景
     *      自我介绍
     *          现在，我是粟鹏，我来自于，毕业于，专业，
     *          过去，做了什么，有什么优势，
     *          将来，要成为什么，几年之内要做一个什么，规划？
     *          三分钟：语速适中：沉稳
     *      餐饮项目：
     *          1）什么样的背景催生出这个项目？
     *          2）收集用户需求？分析用户
     *          3）帮助餐饮企业得到更好的发展
     *          -------------
     *          工作中需要学会和别人沟通，职业发展---中高级软件工程师
     *          CRUD工资
     *          组长
     *          leader
     *          master
     *          项目经理--技术--经理
     *          架构师
     * -----------------------------------------------------------
     * 到新公司
     *     熟悉代码
     *     1.熟悉需求  背景
     *     2.熟悉文档 开发文档
     *     3.熟悉数据库
     *     4.熟悉架构模式（技术标准）
     *     5.熟悉代码
     * -------------------------------
     * String 的方法
     * toString
     * equal
     * split
     * subString
     * length
     *
     *
     *
     */
    /**
     * 2021-11-29 登录
     * 1.写登录页面
     *      1）复制X-admin里面的登录页面
     *      2)修改引用的css和js
     *      3）添加自己的jquery，注意，写在所有的js之前
     *      4）创建一个当前页面的js，将里面的默认js复制到自己的js里面去
     * 2.认识js
     * //java后台swing
     * -----------------------------------------------------
     * 验证码
     * 正则表达式
     * 随机数
     *
     */
    /**
     * 2021-11-30
     * 1.前端传递数据到后台  用ajax
     * 2.后端传递数据到前端用JSONObject
     * -----------------------------------------
     * 服务逻辑层逻辑
     * 1.根据验证码取判断是否正确--字符串大小写转换
     * 2.判断用户名和密码
     */

    /**
     * 2021-12-3 用户查询
     * web拿到数据--》servlet   5个事情---》service 判断验证码和密码--》dao 数据库查询--JDBC
     * 1.前端
     *      1）赋值table
     *      <table class="layui-hide" id="test" lay-filter="test"></table>
     *      2）赋值  操作栏
     *      3）赋值js
     *      layui.use('table', function () {    删掉不必要的js代码
     *      4）修改列名
     *      cols里面的field和model里面的属性名一致  title改成自己的标题
     *      5）修改url
     *        , url: '/back/user/findAll'// 后台servlet的注解地址
     * 2.后台：
     *      1）servlet  六件事情
     *      2）service  三个事情
     *          1.必须code为0
     *          2.必须要有总条数count
     *          3.必须要有查询数据data
     *     3）dao
     *          1.封装sql语句
     *          2.得到结果集
     *          3.解析结果集
     *          4.返回结果数据
     * 注意事项：
     *   1.乱码处理
     *   2.code必须为0
     *   3.如果要查分页，js必须开启分页, page: true//开启分页
     *   4.sql语句 拼接时两端打空格
     */
    /**
     * 2021-12-6 修改enable
     * 1.前端
     *      1）添加状态模板
     *            1，再html里面复制 <script type="text/html" id="enable">
     *            2.再查询所有的列里添加模板，templet: '#enable'}
     *            3.添加监听事件  form.on('checkbox(lockDemo)', function (obj) {
     *      2）再监听事件里面添加ajax方法
     *          1.得到id和enable的值，封装成对象
     *          2.三元运算符   ？左边的为true时，得到冒号左边的值，否则得到冒号右边的值
     *          3.根据后台传回来的res结果判断是否更新成功
     * 2.后端
     *      1）servlet  六件事情
     *      2)service
     *      3)dao
     *----------------------------------------------------
     * 前后端数据传值
     * 前端就是ajax
     * 后台就是返回ResultModel
     * 重点：sql语句的拼写
     */
    /**
     * 2021-12-7 用户新增
     * 1.复制页面
     * 2.修改页面的类型
     * 3.点击按钮，得到所有数据，提供给后台，然后通过后台返回的数据判断是否增加成功
     * -----------------------------------------
     * 后台
     *      1.写servlet
     *      2.service
     *      3.dao
     *
     */
    /**
     * 2021-12-8 编辑-----想查询再修改
     * 前端：
     *      1）页面
     *      2)点击编辑时，应该拿到id
     *      3）页面加载完成时，根据id去数据库里面查询当前的数据
     *      4）根据查询出的数据赋值到当前页面
     * 后台：
     *      1）servlet
     *      2）service
     *      3）dao
     * ------------------------------------------
     * 难点：
     *      1.sql语句
     *      2.servlet里面有可能会出现数据转换异常
     *
     * 对于用户来说，每一次操作都需要重新写方法
     */
    /**
     * 2021-12-9 产品显示
     * 1.赋值页面
     * 2.js修改
     *-------------------------
     * 3.后台
     *      1）servlet
     *      2)service
     *      3)dao
     * ---------------------------------------------
     * 对于显示的字体需要自定义
     * 1.添加模板,templet:'#isShow'
     * 2.添加html模板
     * <script type="text/html" id="isShow">
     *     {{ d.isShow== 1 ? '是' : '否' }}
     * </script>
     * -------------------------------------
     * 下拉菜单赋值后需要重新渲染
     */
    /**
     * 2021-12-10 产品新增
     * 无论前端做什么操作，最总都要通过ajax访问后台
     * 1.servlet
     * 2.service
     * 3.dao
     * ----------------
     * 无论那张表，都会对应几个相同的方法
     * 增，删，改，查
     * -----------------------------------
     * 1.增加baseDao
     * 2.增加baseService
     * 3.封装ResultModel 减少service里面的代码
     */
    /**
     * 2021-12-15 条件查询  模糊查询
     *
     * 1.前端的页面
     * 2.前端js  得到模糊查询的值
     * 注意：怎么将数据传入到后台  where:data
     * ---------------------------
     * 3.servlet  添加 条件语句的取值和封装对象
     * 4.封装sql语句
     * 注意：查询所有和查询总条数的条件应该一致
     * find_in_set函数
     * BaseModel  要学会继承
     *
     * */

    /**
     * 2021-12-16 文件上传
     * 1.复制前端html代码
     * 2.复制layuijs代码，修改Java接口
     * 3.创建servlet的Java类
     * 4.复制文件上传的代码
     *      1）需要定义一个文件夹 upload  用来存储文件上传的图片
     *      2）定义一个工厂 用来临时存储前端传递过来的数据 DiskFileItemFactory
     *      3）定义一个文件解析器 ServletFileUpload
     *      4）将前端文件强制转换为Java 文件 List<FileItem> formItems = upload.parseRequest(request);
     *      5）遍历 文件
     *      6）得到文件名称    String fileName = new File(item.getName()).getName();
     *      7）对文件名称进行 改名
     *      8）创建一个文件保存的路径
     *      9）直接保存  item.write(storeFile);
     *      10）因为out里面的文件可以随时删除，所以需要将文件再次保存到web下面
     *      11）返回给前端的最后文件上传的地址（json格式  src）
     *      12）再js端需要将路径存入session里面用于点击添加时得到图片路径
     * ---------------------------------------------------
     * 点击添加进行正常的功能
     * 注意：编辑时，有可能前端传递过来的数据为空或者为null，
     * 我们需要在sql语句里面去判断
     */
    /**
     * 2021-12-17 富文本上传
     * 1.添加html
     * 2.添加js
     * 3.修改接口 /upload
     * 4.取值 layedit.getContent(index);
     * 5.赋值   layedit.setContent(index, data.content);
     * 注意：layedit，和index要用全局变量
     * -----------------------------------------
     */

    /**
     * 2021-12-20 安全认证
     * 必须让用户进行登录后，才能进行后台管理的权限
     * 1.就是如果用户在前端访问后台的时候 http://localhost:8080/html/user/member-list1.html
     * 2.当用户直接通过接口访问时，http://localhost:8080/back/user/findAll
     * 以上两种情况都必须判断是否已经登录
     * -------------------------------------
     * 无论用户做什么事情，都要判断是否已经登录
     * postman测试的是接口而不是页面
     * 什么情况下才能用return？
     * 必须放在方法里面   return表示有返回值
     * -----------------------------
     * 前端，只要用户刷新页面的时候就要判断是否已经登录
     * 后台过滤器思路
     *  1：得到所有访问后台的地址@WebFilter("/*") 或者@WebFilter("/back/*")
     *  2:判断用户是否已经登录，需要在登录成功以后，将登录状态存入session里面
     *  3：根据session里面的登录名取值，得到是否有当前的用户进行登录
     *  4：如果已经登录则放行filterChain.doFilter(servletRequest, servletResponse);
     *  5：否则返回未登录提示语resp.getWriter().println(JSONObject.toJSONString(ResultModel.getModel("未登录，请登录")));
     *  6：将乱码提取到过滤器，则所有webservlet里面的乱码都可以不用写了
     *  -------------------------------------------------------------------
     *  注意：session 认证应该在前后端都需要判断是否已经登录
     *  熟悉postman软件（测试接口用）
     */
    /**
     * 2021-12-21 前端赋值
     * 1.将页面复制到当前项目
     * 2.在每个页面创建一个js
     * 3.在js里面设置当页面加载完成执行里面的代码
     * 4.通过ajax访问后台
     * 5.通过后台返回的数据格式进行分别赋值
     * 6.Java后台代码的编写 ---最终要将多个数据保存到一个容器里面
     */
    /**
     * 2021-12-23 产品页面的赋值
     * 1.首先将菜系赋值
     *      1）对每个菜系div增加一个方法onclick="cuisineChange(' + data[i].id + ',this)">
     *      2)拿到当前菜系可以对当前div设置样式（通过js）
     * 2.页面加载完成执行分页方法
     *      1）将分页单独提取到一个方法里面function page()
     *      2）需要对分页设置总条数 getProductPageCount（）
     *      3）需要设置每一页显示的条数 , limit: 8
     *      4）需要设置异步关闭（从上到下依次执行\） , async: false //关闭异步
     *      5）每一次查询后台必须给定参数
     *       let data = {page: obj.curr, limit: obj.limit, whereShow: 2, cuisineId: cuisineId};
     *      6）如果想要得到ajax里面的值，需要在外面进行定义一个变量
     * ----------------------------------------------------
     * Java后台代码：
     *  注意：
     *  最好和后台管理的代码分开（可以单独去创建service和dao层）
     *  最好不要公用后台代码
     */

    /**
     * 2021-12-29 第五阶段
     * redis
     * 1.定义？是什么？
     * 2.应用场景？可以做什么？
     * 3.优势？为什么要学，为什么要用？
     * 4.怎么做？怎么应用到项目？
     * --------------------------------------
     * Java集合属于自定义对象！LinkList,ArrayList,这些都是通过数组来进行分组
     * 数据库或者tomcat访问极限大概是多大？
     * 300-1000之间    1000-5000之间  负荷
     * update  user  set aa=aa+1 where id=2;
     * -------------------------------------------
     * 1.和mysql一样，要用redis必须安装redis软件
     * 2.如果我们的项目要用，首先得想到哪些地方可以用？
     *    哪些地方属于数据量查询比较频繁
     * 3.所以我们的数据应该是大量客户同时访问的地方？
     *    前端页面
     * 4.以前我们的数据都是来源于数据库，现在我们的数据来源于redis
     * 5.所以 我们查询某个页面的时候，
     * 数据的第一次取之于数据库，
     * 取完后应该键数据同时保存到redis
     * 等待下一位用户访问，首先取判断redis里面是否有数据，
     * 如果有则取reids，如果没有，则继续查询数据库
     * -----------------------------------------------------
     * 管理员如果对数据进行修改，我们必须删除key值，以获取最新的数据
     * 当删除集合时，我们需要删除当前所有的key值
     *
     */
    /**
     * 2021-12-30 第五阶段线程
     * 1.定义？是什么？
     * 2.应用场景？可以做什么
     * 3.优势？为什么要做？
     * 4.怎么做？思路？
     * ----------------------
     * 实现线程的方式？2种
     * 实现线程的步骤？
     * 1.创建线程对象MyThread
     * 2.重写run方法public void run() {
     * 3.写执行代码 System.out.println("aaaaaaa");
     * 4.创建执行的程序  main函数
     * 5.创建线程对象MyThread myThread=new MyThread();
     * 6.线程就绪：开始执行 myThread.start();
     * ---------------------------------
     * 1.创建线程
     * 2.线程命名
     * 3.得到线程对象 Thread.currentThread()
     * 4.线程的执行顺序和我们代码书写顺序无关：执行顺序是有线程自己取抢占CPU资源，谁快谁先执行
     * 5.优先级：表示大概率事件，并不是绝对
     * 6.优先级的特性:\
     * 7.实例
     * 8.锁  自动  手动
     * 9.sleep  休眠
     * 10.死锁
     */
    /**
     * 2021-12-31
     * 1.join
     * 2.生产者和消费者模型
     */
}
